iT邦幫忙

2024 iThome 鐵人賽

DAY 4
1
Kubernetes

都什麼年代了,還在學 Kubernetes系列 第 4

學 Kubernetes 的第四天 - 建立 Kubernetes 叢集 - KinD

  • 分享至 

  • xImage
  •  

概述

市面上有多種安裝 Kubernetes 的框架和工具,而我們選擇使用 KinD。

KinD 是 "Kubernetes in Docker" 的縮寫,它是一個使用 Docker 容器模擬節點來運行本地 Kubernetes 叢集的工具。KinD 最初設計是為了測試 Kubernetes 本身,但它也非常適合用於本地開發或 CI 環境。KinD 可以快速部署,並支持在單一機器上部署多節點叢集,這非常適合我們進行練習和實作。

由於我使用的作業系統是 Windows 11,接下來我們將通過 WSL 來安裝 KinD 並部署 K8s 叢集。

安裝 WSL2 - Ubuntu

  • 在 Microsoft Store 直接搜尋 ubuntu

https://ithelp.ithome.com.tw/upload/images/20240918/20168212MBqV7rM5SG.png

  • 安裝完成後,開啟 Terminal,在 + 右邊的下拉式選單選擇 Ubuntu 開啟新視窗

https://ithelp.ithome.com.tw/upload/images/20240918/20168212M95haqPnhx.png

第一次執行會進行初始化,等待初始化完成。

  • 設置 root 密碼

https://ithelp.ithome.com.tw/upload/images/20240918/20168212beKjuJZZB6.png

到這裡,WSL 就安裝完成了。

安裝 Docker Desktop

既然 KinD 是通過 Docker 容器來模擬節點的,自然我們首先需要安裝 Docker。下面,我將帶大家安裝和設定 Docker Desktop 並與 WSL 整合。

  • Docker.com頁面下載並安裝 Docker Desktop。

接下來,依照順序在 Docker Desktop 進行操作:

  • 開啟 Desktop 後,點選右上角 Settings -> 從左側選單點選 Resources -> 點選副選單 WSL integration
  • 啟用 Enable integration with my default WSL distro
  • (可選) 如果你有複數個 WSL distro,在 Enable integration with additional distros 啟用想整合的 distro。

https://ithelp.ithome.com.tw/upload/images/20240918/20168212kT1fhakvgE.png

  • 關掉之前的 Terminal,重新進入 Ubuntu,使用指令 docker version 檢查 docker 是否可用
docker version

結果如下

Client:
 Version:           27.0.3
 API version:       1.46
 Go version:        go1.21.11
 Git commit:        7d4bcd8
 Built:             Sat Jun 29 00:01:25 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Desktop
 Engine:
  Version:          27.0.3
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       662f78c
  Built:            Sat Jun 29 00:02:50 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.18
  GitCommit:        ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
 runc:
  Version:          1.7.18
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

到這裡,Docker 與 WSL 整合便完成了。

安裝 KinD

  • 在 Ubuntu WSL 中,使用以下指令安裝 KinD
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-$(uname)-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
  • 檢查 KinD 的版本
kind version
---
kind v0.23.0 go1.21.10 linux/amd64

KinD 真的很簡單,常用的語法也就以下這幾種:

# 列出所有叢集
kind get clusters
# 取得指定叢集的 kubeconfig
kind get kubeconfig --name wslkind
# 取得指定叢集的 nodes
kind get nodes --name wslkind
# 建立叢集
kind create cluster --name <name> --config=</path/to/config_file>
# 刪除指定叢集
kind delete cluster --name <name>
# 刪除所有叢集
kind delete clusters
# 查詢 kind 指令
kind -h

KinD 配置叢集的參數可以參考 Configuration,這裡我們使用以下配置創建叢集,好配合之後的實作。

設定檔: wslkind.yaml

apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
    protocol: tcp
- role: worker
- role: worker

由於 Docker container 與本機之間存在網路隔離,無法直接訪問叢集中的 NodePort 類型服務。為了在本機上訪問這些服務,需要在 KinD 的配置中添加 extraPortMappings 欄位,將本機的端口流量轉發到 Kubernetes 叢集中的 NodePort 端口。這樣,我們可以通過 http://localhost:<hostPort> 訪問到叢集中的服務,該服務實際上在叢集中的地址是 http://<node-ip>:<containerPort>

  • 創建 Cluster
# 檢查 .kube 是否已存在
ls $HOME/.kube
# 創建 cluster wslkind
kind create cluster --name wslkind --config wslkind.yaml
# 檢查 .kube 有沒有被創建
ls $HOME/.kube
  • 檢查 cluster 的狀態
kind get clusters
---
wslkind
  • 查看 Docker Desktop

https://ithelp.ithome.com.tw/upload/images/20240918/201682127pKHD7qO9O.png

可以看到叢集中的節點產生了對應的容器。

小結

儘管有像 KinD、MicroK8s 等工具的幫助,建立 Kubernetes 叢集依然是一項具有挑戰性的任務。我建議大家盡可能在不同的情境和環境中嘗試搭建 K8s 叢集,這樣可以熟悉整個過程,並學習如何解決在建立過程中可能遇到的各種問題。


上一篇
學 Kubernetes 的第三天 - Kubernetes 元件
下一篇
學 Kubernetes 的第五天 - Kubernetes 瑞士刀 - kubectl
系列文
都什麼年代了,還在學 Kubernetes37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言